Bundle=function(templateId,locale){
	this.locale=locale;
	var tid=templateId;
	var obj={};
	if(!locale){
		this.locale=Request.getParam('locale')||Cookie.get('locale')|| defaultLocale || 'en';
		Cookie.set('locale',Bundle.locale);		
	}
		
	/**
	 * @return locale messages bundle
	 * @param data
	 * var data={
	 * 	en : {
	 * 		key : 'value'
	 *  },
	 *  zh : {
	 *      key : 'value'
	 *  }
	 * @param loc locale e.g. 'zh'
	 * TODO: support zh_CN.
	 */
	this.toLocale=function(data,loc){
		if(!loc)loc=this.locale;
		for(var k in data[loc]){
			obj[k] = data[loc][k];
		}
		for(var l in data){
			for(var k in data[l]){
				if(!obj[k]) obj[k]=data[l][k]
			}
		}
		obj['locale']=loc;
		return obj;	
	}
	
	/**
	 * @param data rawdata
	 */
	this.parse=function(data,toId){
		var txt= TrimPath.processDOMTemplate(templateId, data);
		if(toId)$ID(toId).innerHTML=txt;
		return txt;
	}
	/**
	 * @param data i18ndata
	 */
	this.parseLocale=function(data,toId,loc){
		return this.parse(this.toLocale(data,loc),toId);
	}
}
